#ifndef MODEL_H
#define MODEL_H

#include "Primitive.h"

class Model : public Shape {

	public:

		//Misc
		Model(Config*, string);
		Model* GetCopy();

		//Retrieve models
		vector<Model*> Models;
		boolean AddModel(Model*); //checks duplicate ID
		Model* GetModel(int);
		boolean RemoveModel(int); //by ID
		boolean ContainsModel(int); //by ID

		//Retrieve primitives
		vector<Primitive*> Primitives;
		boolean AddPrimitive(Primitive*); //checks duplicate ID
		int GetNrOfPrimitives(); //recursive
		Primitive* GetPrimitive(int); //by ID
		boolean RemovePrimitive(int); //by ID
		boolean ContainsPrimitive(int); //by ID

		//Indices and vertices
		int GetNrOfIndices();
		int GetNrOfVertices();

		virtual void Translate(XMVECTOR);
		virtual void Scale(XMVECTOR);
		virtual void Rotate(XMVECTOR);

		virtual XMVECTOR GetLowest();
		virtual XMVECTOR GetHighest();
		virtual XMVECTOR GetCenter();
		void GetCenter(XMVECTOR*, int*);

	private:

		Config* config;
		
};

#endif